//路由鉴权
import router from '@/router/index.ts'

import setting from '@/setting.ts'
import nprogresss from 'nprogress'
import pinia from '@/store'
// 引入进度条样式
import 'nprogress/nprogress.css'
nprogresss.configure({
  showSpinner: false,
})
import useUserStore from '@/store/modules/user.ts'
let userStore = useUserStore(pinia)
console.log('userStore===>', userStore)
//全局守卫
//全局前置守卫
router.beforeEach(async (to: any, from: any, next: any) => {
  //网页标题
  document.title = `${setting.title}-${to.meta.title}`
  //to 访问目标路由
  //from 访问源路由
  console.log('全局前置守卫', to, from)
  //访问某一个路由之前
  nprogresss.start()

  let token = userStore.token
  let username = userStore.username
  if (token) {
    //用户已登录
    if (to.path == '/login') {
      next({ path: '/' })
    } else {
      //有用户信息
      if (username) {
        next()
      } else {
        //没有用户信息，派发action获取用户信息
        try {
          await userStore.userInfo()
          //放行
          //问题一：刷新的时候是异步路由，有可能获取到用户信息，异步路由还没加载完毕，就会导致刷新出现空白页面

          next({ ...to })
        } catch (error) {
          //token 失效了，退出登录
          await userStore.logout()
          next({
            path: '/login',
            query: {
              redirect: to.path,
            },
          })
        }
      }
    }
  } else {
    //用户未登录
    if (to.path == '/login') {
      next()
    } else {
      next({
        path: '/login',
        query: {
          redirect: to.path,
        },
      })
    }
  }
  //路由放行
  next()
})

//全局后置守卫
router.afterEach((to: any, from: any) => {
  console.log('全局后置守卫', to, from)
  nprogresss.done()
})

//1、任意路由的切换实现进度条业务  --- pnpm i nprogress

//2、路由鉴权：路由权限控制
// 全部路由：登录|404|任意路由|首页|数据大屏|权限管理（三个子路由）|商品管理（四个子路由）
//用户未登录：可以访问登录页，其余都不能访问
// 用户登录成功： 不可以访问登录页，其余都可以访问
// 登录|404|任意路由可以直接访问
// 首页|数据大屏|权限管理（三个子路由）|商品管理（四个子路由）需要登录才能访问
// 权限管理（三个子路由）：
// 角色列表|用户列表|商品分类|商品列表
// 商品管理（四个子路由）：
// 全部路由：登录
